    package sv.com.globalsolutionslt.manejador;

import java.io.Serializable;
import java.util.Date;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.apache.commons.io.IOUtils;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;
import sv.com.globalsolutionslt.controlador.ContactoEntidadFacade;
import sv.com.globalsolutionslt.controlador.CurriculumFacade;
import sv.com.globalsolutionslt.controlador.DetalleEstudioFacade;
import sv.com.globalsolutionslt.controlador.DetalleHabilidadesFacade;
import sv.com.globalsolutionslt.controlador.DireccionFacade;
import sv.com.globalsolutionslt.controlador.HabilidadesExtrasFacade;
import sv.com.globalsolutionslt.controlador.IdiomaPersonaFacade;
import sv.com.globalsolutionslt.controlador.PersonaFacade;
import sv.com.globalsolutionslt.entidades.Categoria;
import sv.com.globalsolutionslt.entidades.ContactoEntidad;
import sv.com.globalsolutionslt.entidades.Curriculum;
import sv.com.globalsolutionslt.entidades.Departamento;
import sv.com.globalsolutionslt.entidades.DetalleEstudio;
import sv.com.globalsolutionslt.entidades.DetalleHabilidades;
import sv.com.globalsolutionslt.entidades.Direccion;
import sv.com.globalsolutionslt.entidades.HabilidadesExtras;
import sv.com.globalsolutionslt.entidades.IdiomaPersona;
import sv.com.globalsolutionslt.entidades.Persona;

@ManagedBean
@SessionScoped
public class CandidatoCvMB implements Serializable {
    @EJB
    private CurriculumFacade curriculumFacade;
    @EJB
    private IdiomaPersonaFacade idiomaPersonaFacade;
    @EJB
    private HabilidadesExtrasFacade habilidadesExtrasFacade;
    @EJB
    private DetalleEstudioFacade detalleEstudioFacade;
    @EJB
    private DetalleHabilidadesFacade detalleHabilidadesFacade;
    @EJB
    private DireccionFacade direccionFacade;
    @EJB
    private ContactoEntidadFacade contactoEntidadFacade;
    @EJB
    private PersonaFacade personaFacade;
    

    private Persona persona;
    private Direccion direccion;

    private DetalleHabilidades detalleHabilidades;
    private Categoria categoria;
    private DetalleEstudio detalleEstudio;
    private HabilidadesExtras habilidadesExtras;
    private IdiomaPersona idiomaPersona;

    ///////PARA EL CURRICULUM
    private Curriculum curriculum;
    
    private UploadedFile file;

    private Departamento departamento;

    private ContactoEntidad direc;
    private ContactoEntidad email;
    private ContactoEntidad telefono;
    private ContactoEntidad face;
    private ContactoEntidad twitter;

    public CandidatoCvMB() {
        persona = new Persona();
        categoria = new Categoria();
        departamento = new Departamento();
    }

    public ContactoEntidad getDirec() {
        return direc;
    }

    public void setDirec(ContactoEntidad direc) {
        this.direc = direc;
    }

    public ContactoEntidad getEmail() {
        return email;
    }

    public void setEmail(ContactoEntidad email) {
        this.email = email;
    }

    public ContactoEntidad getTelefono() {
        return telefono;
    }

    public void setTelefono(ContactoEntidad telefono) {
        this.telefono = telefono;
    }

    public ContactoEntidad getTwitter() {
        return twitter;
    }

    public void setTwitter(ContactoEntidad twitter) {
        this.twitter = twitter;
    }

    public ContactoEntidad getFace() {
        return face;
    }

    public void setFace(ContactoEntidad face) {
        this.face = face;
    }

    /////////////////
    public Departamento getDepartamento() {
        return departamento;
    }

    public void setDepartamento(Departamento departamento) {
        direccion.setIdMunicipio(null);
        this.departamento = departamento;
    }

    public Persona getPersona() {
        return persona;
    }

    public void setPersona(Persona persona) {
        this.persona = persona;
    }

    public Direccion getDireccion() {
        return direccion;
    }

    public void setDireccion(Direccion direccion) {
        this.direccion = direccion;
    }

    ////////////
    public DetalleHabilidades getDetalleHabilidades() {
        return detalleHabilidades;
    }

    public void setDetalleHabilidades(DetalleHabilidades detalleHabilidades) {
        this.detalleHabilidades = detalleHabilidades;
    }

    public Categoria getCategoria() {
        return categoria;
    }

    public void setCategoria(Categoria categoria) {
        this.categoria = categoria;
    }

    public DetalleEstudio getDetalleEstudio() {
        return detalleEstudio;
    }

    public void setDetalleEstudio(DetalleEstudio detalleEstudio) {
        this.detalleEstudio = detalleEstudio;
    }

    public HabilidadesExtras getHabilidadesExtras() {
        return habilidadesExtras;
    }

    public void setHabilidadesExtras(HabilidadesExtras habilidadesExtras) {
        this.habilidadesExtras = habilidadesExtras;
    }

    public IdiomaPersona getIdiomaPersona() {
        return idiomaPersona;
    }

    public void setIdiomaPersona(IdiomaPersona idiomaPersona) {
        this.idiomaPersona = idiomaPersona;
    }
    ////////////////////////////////////////////////////////////////////////////
    ///////////NUEVO METODO PARA GUARDAR FOTO
    ////////////////////////////////////////////////////////////////////////////
     public void manejadorEventoCargarFichero(FileUploadEvent event) throws Exception {
//        LanzadorMensaje.informacion("Archivo " +event.getFile().getFileName() + " cargado con éxito");
        //curriculum.setDocumento(event.getFile().getContents());
         System.out.println(event.getFile().getFileName());
         System.out.println(IOUtils.toByteArray(event.getFile().getInputstream()));
        //curriculum.setIdPersona(persona);
//        getEntidad().setImagen(event.getFile().getContents());
//        if(!isNuevaEntidad())
//            guardarEntidad();
//        curriculumFacade.crear(curriculum);
    }    
    ////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////
    
    
    
    ////////////////////////////////////////////////////////////////////////////
    /////////////////Salvar
    public void salvaFoto() {

        try {
//            curriculumFacade.crear(curriculum);
            System.out.println("++++++++++++++" + curriculum.getIdPersona().toString());
        } catch (Exception ex) {
//            ex.printStackTrace();
        }
    }

    public void processFileUpload(FileUploadEvent uploadEvent) {
        try {
            curriculum.setIdPersona(persona);
            byte[] contenidoFichero = IOUtils.toByteArray(uploadEvent.getFile().getInputstream());
            System.out.println("Contenido del documento "+contenidoFichero);
            curriculum.setDocumento(contenidoFichero);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    ////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////

    public String prepararCv(Persona p) {

        persona = p;
        direccion = direccionFacade.bDirecPorPers(p.getIdPersona());
        telefono = contactoEntidadFacade.bValor(persona.getIdPersona(), 1);
        email = contactoEntidadFacade.bValor(persona.getIdPersona(), 2);
        face = contactoEntidadFacade.bValor(persona.getIdPersona(), 3);
        twitter = contactoEntidadFacade.bValor(persona.getIdPersona(), 4);
        curriculum = new Curriculum();

        if (face == null) {
            face = new ContactoEntidad();
        }
        if (twitter == null) {
            twitter = new ContactoEntidad();
        }
        if(direccion!=null)
            departamento = direccion.getIdMunicipio().getIdDepartamento();

        return "/vistas/CvCandidato/CvCandidato";
    }

    public void ActualizarCandidato() throws Exception {

        //Para registro de Persona
        personaFacade.modificar(persona);
        //Para Registro de Dirección 
        direccionFacade.modificar(direccion);
        //Preparando parametros de Contacto
        telefono.setFechaMod(new Date());
        email.setFechaMod(new Date());
        face.setFechaMod(new Date());
        twitter.setFechaMod(new Date());
        contactoEntidadFacade.modificar(telefono);
        contactoEntidadFacade.modificar(email);
        if (!(face.getValor().trim().equals(""))) {
            contactoEntidadFacade.modificar(face);
        }
        if (!(twitter.getValor().trim().equals(""))) {
            contactoEntidadFacade.modificar(twitter);
        }

        prepararCv(persona);
    }

    ////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////
    public void prepRegistrarIdioma() {
        idiomaPersona = new IdiomaPersona();
    }

    public void registrarIdioma() throws Exception {
        idiomaPersona.setIdPersona(persona);
        idiomaPersonaFacade.crear(idiomaPersona);
    }

    public void prepararEliminarIdioma(Integer id) {
        idiomaPersona = new IdiomaPersona();
        idiomaPersona = idiomaPersonaFacade.encontrarPorID(id);
    }

    public void eliminarIdioma() throws Exception {
        persona.getIdiomaPersonaList().remove(idiomaPersona);
        idiomaPersonaFacade.remover(idiomaPersona);
    }

    ////////////////////////////////////////////////////////////////////////////
    public void prepRegistrarHabilidad() {
        categoria = new Categoria();
        detalleHabilidades = new DetalleHabilidades();
    }

    public void registrarHabilidad() throws Exception {
        detalleHabilidades.setFechaMod(new Date());
        detalleHabilidades.setUsuarioMod(persona.getIdUsuario().getIdUsuario().intValue());
        detalleHabilidades.setIdPersona(persona);
        detalleHabilidadesFacade.crear(detalleHabilidades);
        persona.getDetalleHabilidadesList().add(detalleHabilidades);
    }

    public void prepararEliminarHabilidad(Integer id) {
        detalleHabilidades = new DetalleHabilidades();
        detalleHabilidades = detalleHabilidadesFacade.encontrarPorID(id);
    }

    public void eliminarHabilidad() throws Exception {
        persona.getDetalleHabilidadesList().remove(detalleHabilidades);
        detalleHabilidadesFacade.remover(detalleHabilidades);
    }

    ////////////////////////////////////////////////////////////////////////////
    public void prepRegistrarEstudio() {
        detalleEstudio = new DetalleEstudio();
    }

    public void registrarEstudio() throws Exception {
        detalleEstudio.setFechaMod(new Date());
        detalleEstudio.setUsuarioMod(persona.getIdUsuario().getIdUsuario().intValue());
        detalleEstudio.setIdPersona(persona);
        detalleEstudioFacade.crear(detalleEstudio);
        persona.getDetalleEstudioList().add(detalleEstudio);
    }

    public void prepararEliminarEstudio(Integer id) {
        detalleEstudio = new DetalleEstudio();
        detalleEstudio = detalleEstudioFacade.encontrarPorID(id);
    }

    public void eliminarEstudio() throws Exception {
        detalleEstudioFacade.remover(detalleEstudio);
    }

    public void prepararActualizarEstudio(Integer id) {
        detalleEstudio.setFechaMod(new Date());
        detalleEstudio.setUsuarioMod(persona.getIdUsuario().getIdUsuario().intValue());
        detalleEstudio = new DetalleEstudio();
        detalleEstudio = detalleEstudioFacade.encontrarPorID(id);
    }

    public void actualizarEstudio() throws Exception {
        detalleEstudioFacade.modificar(detalleEstudio);
    }

    ////////////////////////////////////////////////////////////////////////////
    public void prepRegistrarHabExt() {
        habilidadesExtras = new HabilidadesExtras();
    }

    public void registrarHabExt() throws Exception {
        habilidadesExtras.setFechaMod(new Date());
        habilidadesExtras.setUsuarioMod(persona.getIdUsuario().getIdUsuario().intValue());
        habilidadesExtras.setIdPersona(persona);
        habilidadesExtrasFacade.crear(habilidadesExtras);
    }

    public void prepActualizarHabExt(Integer id) {
        habilidadesExtras = new HabilidadesExtras();
        habilidadesExtras = habilidadesExtrasFacade.encontrarPorID(id);
    }

    public void actualizarHabExt() throws Exception {
        habilidadesExtras.setFechaMod(new Date());
        habilidadesExtras.setUsuarioMod(persona.getIdUsuario().getIdUsuario().intValue());
        habilidadesExtras.setIdPersona(persona);
        habilidadesExtrasFacade.modificar(habilidadesExtras);
    }

    public void prepararEliminarHabExt(Integer id) {
        habilidadesExtras = new HabilidadesExtras();
        habilidadesExtras = habilidadesExtrasFacade.encontrarPorID(id);
    }

    public void eliminarHabExt() throws Exception {
        habilidadesExtrasFacade.remover(habilidadesExtras);
    }
}
